﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TMD.GT.Entidades;
using TMD.GT.AccesoDatos.Map;
using TMD.GT.AccesoDatos.Contrato;
using TMD.GT.AccesoDatos.Core;
using System.Data.Common;
using System.Data;


namespace TMD.GT.AccesoDatos.Implementacion
{
    public class ComponenteData : DataBase, IComponenteData
    {
        public ComponenteData(String connectionString)
            : base(connectionString)
        {
        }


        //agregò raul INICIO
        public List<Componente> ListarComponentesMonitoreo(Componente componente)
        {
            List<Componente> listaComponente = new List<Componente>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_MONITOREO_COMPONENTE_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CLASE", DbType.Int32, componente.CodigoTipo);

                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaComponente.Add(ComponenteMap.Select(reader));
                    }
                }
            }
            return listaComponente;
        }

        //agregò Raúl FIN


        public List<Componente> ListarComponentes(Componente componente)
        {
            List<Componente> listaComponente = new List<Componente>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_EVAL_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CODIGO_TIPO", DbType.Int32, componente.CodigoTipo);

                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaComponente.Add(ComponenteMap.Select(reader));
                    }
                }
            }
            return listaComponente;
        }

        public List<Componente> ListarComponentes2(Componente componente)
        {
            List<Componente> listaComponente = new List<Componente>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CODIGO_TIPO", DbType.Int32, componente.CodigoTipo);

                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaComponente.Add(ComponenteMap.Select(reader));
                    }
                }
            }
            return listaComponente;
        }


        public List<Componente> ListarComponentes3(Componente componente)
        {
            List<Componente> listaComponente = new List<Componente>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_LISTA_COMPONENTE_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CODIGO_TIPO", DbType.Int32, componente.CodigoTipo);

                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaComponente.Add(ComponenteMap.Select2(reader));
                    }
                }
            }
            return listaComponente;
        }

        public List<Componente> ListaUnComponente(Componente componente)
        {
            List<Componente> listaComponente = new List<Componente>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_LISTA_COMPONENTE_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CODIGO_TIPO", DbType.Int32, componente.CodigoTipo);
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.Int32, componente.CodigoComponente);

                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaComponente.Add(ComponenteMap.Select3(reader));
                    }
                }
            }
            return listaComponente;
        }


        public void ActualizarComponente(Componente componente)
        {
            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_UPD"))
            {
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.Int32, componente.CodigoComponente);
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CODIGO_TIPO", DbType.Int32, componente.CodigoTipo);
                DB.AddInParameter(command, "@CONCEPTO", DbType.String, componente.Concepto);
                DB.AddInParameter(command, "@PROPOSITO", DbType.String, componente.Proposito);
                DB.AddInParameter(command, "@PROBLEMA", DbType.String, componente.Problema);
                DB.AddInParameter(command, "@ALCANCE", DbType.String, componente.Alcance);
                DB.AddInParameter(command, "@BENEFICIOS", DbType.String, componente.Beneficios);
                DB.AddInParameter(command, "@EXCLUSIONES", DbType.String, componente.Exclusiones);
                DB.AddInParameter(command, "@COSTO", DbType.Decimal, componente.Costo);
                DB.AddInParameter(command, "@VAN", DbType.Decimal, componente.VAN);
                DB.AddInParameter(command, "@RBC", DbType.Decimal, componente.RBC);
                DB.AddInParameter(command, "@TIR", DbType.Decimal, componente.TIR);
                DB.AddInParameter(command, "@CODIGO_ALINEAMIENTO", DbType.String, componente.CodigoAlineamiento);
                DB.AddInParameter(command, "@PRIORIDAD", DbType.Int32, componente.Prioridad);
                DB.AddInParameter(command, "@OBS_SELECCION", DbType.String, componente.ObsSeleccion);
                DB.AddInParameter(command, "@CODIGO_CATEGORIA", DbType.Int32, componente.CodigoCategoria);
                DB.AddInParameter(command, "@OBS_APROBACION", DbType.String, componente.ObsAprobacion);

                DB.AddInParameter(command, "@DURACION", DbType.String, componente.Duracion);
                DB.AddInParameter(command, "@FECHA_TERMINO", DbType.String, componente.FechaTermino);            

                DB.ExecuteNonQuery(command);


            }
        }




        public void CrearComponente(Componente componente)
        {
            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_INS"))
            {
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.Int32, componente.CodigoComponente);
                DB.AddInParameter(command, "@CODIGO", DbType.String, componente.Codigo);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, componente.Nombre);
                DB.AddInParameter(command, "@CODIGO_TIPO", DbType.Int32, componente.CodigoTipo);
                DB.AddInParameter(command, "@CONCEPTO", DbType.String, componente.Concepto);
                DB.AddInParameter(command, "@PROPOSITO", DbType.String, componente.Proposito);
                DB.AddInParameter(command, "@PROBLEMA", DbType.String, componente.Problema);
                DB.AddInParameter(command, "@ALCANCE", DbType.String, componente.Alcance);
                DB.AddInParameter(command, "@BENEFICIOS", DbType.String, componente.Beneficios);
                DB.AddInParameter(command, "@EXCLUSIONES", DbType.String, componente.Exclusiones);
                DB.AddInParameter(command, "@COSTO", DbType.Decimal, componente.Costo);
                DB.AddInParameter(command, "@VAN", DbType.Decimal, componente.VAN);
                DB.AddInParameter(command, "@RBC", DbType.Decimal, componente.RBC);
                DB.AddInParameter(command, "@CODIGO_ALINEAMIENTO", DbType.String, componente.CodigoAlineamiento);
                DB.AddInParameter(command, "@PRIORIDAD", DbType.Int32, componente.Prioridad);
                DB.AddInParameter(command, "@OBS_SELECCION", DbType.String, componente.ObsSeleccion);
                DB.AddInParameter(command, "@CODIGO_CATEGORIA", DbType.Int32, componente.CodigoCategoria);
                DB.AddInParameter(command, "@OBS_APROBACION", DbType.String, componente.ObsAprobacion);

                DB.ExecuteNonQuery(command);


            }
        }


        //Agregado CUS2 //
        public List<Componente> ListarComponentesPriori(Componente componente)
        {
            List<Componente> listaComponente = new List<Componente>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_PRIORIZAR_SEL"))
            {
                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaComponente.Add(ComponenteMap.Select(reader));
                    }
                }
            }
            return listaComponente;
        }

        public void ActualizarPriorizacion(string codigo, int priorizacion)
        {
            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_PRIORIZA_UPD"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, codigo);
                DB.AddInParameter(command, "@VALOR", DbType.String, priorizacion);
                DB.ExecuteNonQuery(command);
            }
        }

        public void ActualizarAprobacion(string codigo,string estado_componente, string observacion)
        {
            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_APRUEBA_UPD"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, codigo);
                DB.AddInParameter(command, "@ESTADO_COMPONENTE", DbType.String, estado_componente);
                DB.AddInParameter(command, "@OBSERVACION", DbType.String, observacion);
                
                DB.ExecuteNonQuery(command);
            }
        }
//Agregado CUS2 //
        
        //CUS - Seleccion Componente
        public void ActualizarEstadoCategorización(string codigo, string estado_componente)
        {
            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_COMPONENTE_CATEGORIZA_UPD"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.String, codigo);
                DB.AddInParameter(command, "@ESTADO_COMPONENTE", DbType.String, estado_componente);
               
                DB.ExecuteNonQuery(command);
            }
        }



        



    }
}
